home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2009 February
/
PCWFEB09.iso
/
Software
/
Resources
/
Chat & Communication
/
Digsby build 37
/
digsby_setup.exe
/
lib
/
simplejson
/
decoder.pyo
(
.txt
)
< prev
next >
Wrap
Python Compiled Bytecode
|
2008-10-13
|
9KB
|
344 lines
# Source Generated with Decompyle++
# File: in.pyo (Python 2.5)
import re
import sys
from simplejson.scanner import make_scanner, pattern
try:
from simplejson._speedups import scanstring as c_scanstring
except ImportError:
c_scanstring = None
FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL
def _floatconstants():
import struct as struct
import sys as sys
_BYTES = '7FF80000000000007FF0000000000000'.decode('hex')
if sys.byteorder != 'big':
_BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1]
(nan, inf) = struct.unpack('dd', _BYTES)
return (nan, inf, -inf)
(NaN, PosInf, NegInf) = _floatconstants()
def linecol(doc, pos):
lineno = doc.count('\n', 0, pos) + 1
if lineno == 1:
colno = pos
else:
colno = pos - doc.rindex('\n', 0, pos)
return (lineno, colno)
def errmsg(msg, doc, pos, end = None):
(lineno, colno) = linecol(doc, pos)
if end is None:
return '%s: line %d column %d (char %d)' % (msg, lineno, colno, pos)
(endlineno, endcolno) = linecol(doc, end)
return '%s: line %d column %d - line %d column %d (char %d - %d)' % (msg, lineno, colno, endlineno, endcolno, pos, end)
_CONSTANTS = {
'-Infinity': NegInf,
'Infinity': PosInf,
'NaN': NaN,
'true': True,
'false': False,
'null': None }
def JSONConstant(match, context, c = _CONSTANTS):
s = match.group(0)
fn = getattr(context, 'parse_constant', None)
if fn is None:
rval = c[s]
else:
rval = fn(s)
return (rval, match.end())
pattern('(-?Infinity|NaN|true|false|null)')(JSONConstant)
def JSONNumber(match, context):
(integer, frac, exp) = match.groups()[:3]
fn = None if frac or exp else int
res = fn(integer)
return (res, match.end())
pattern('(-?(?:0|[1-9]\\d*))(\\.\\d+)?([eE][-+]?\\d+)?')(JSONNumber)
STRINGCHUNK = re.compile('(.*?)(["\\\\\\x00-\\x1f])', FLAGS)
BACKSLASH = {
'"': u'"',
'\\': u'\\',
'/': u'/',
'b': u'\x08',
'f': u'\x0c',
'n': u'\n',
'r': u'\r',
't': u'\t' }
DEFAULT_ENCODING = 'utf-8'
def py_scanstring(s, end, encoding = None, strict = True, _b = BACKSLASH, _m = STRINGCHUNK.match):
if encoding is None:
encoding = DEFAULT_ENCODING
chunks = []
_append = chunks.append
begin = end - 1
while None:
chunk = _m(s, end)
if chunk is None:
raise ValueError(errmsg('Unterminated string starting at', s, begin))
end = chunk.end()
(content, terminator) = chunk.groups()
if content:
if not isinstance(content, unicode):
content = unicode(content, encoding)
_append(content)
if terminator == '"':
break
elif terminator != '\\':
if strict:
raise ValueError(errmsg('Invalid control character %r at', s, end))
else:
_append(terminator)
try:
esc = s[end]
except IndexError:
raise ValueError(errmsg('Unterminated string starting at', s, begin))
if esc != 'u':
try:
m = _b[esc]
except KeyError:
raise ValueError(errmsg('Invalid \\escape: %r' % (esc,), s, end))
end += 1
else:
esc = s[end + 1:end + 5]
next_end = end + 5
msg = 'Invalid \\uXXXX escape'
try:
if len(esc) != 4:
raise ValueError
uni = int(esc, 16)
if uni <= uni:
pass
elif uni <= 56319 and sys.maxunicode > 65535:
msg = 'Invalid \\uXXXX\\uXXXX surrogate pair'
if not s[end + 5:end + 7] == '\\u':
raise ValueError
esc2 = s[end + 7:end + 11]
if len(esc2) != 4:
raise ValueError
uni2 = int(esc2, 16)
uni = 65536 + (uni - 55296 << 10 | uni2 - 56320)
next_end += 6
m = unichr(uni)
except ValueError:
raise ValueError(errmsg(msg, s, end))
end = next_end
continue
return (u''.join(chunks), end)
if not c_scanstring:
pass
scanstring = py_scanstring
def JSONString(.0, context):
(string, end) = .0
encoding = getattr(context, 'encoding', None)
strict = getattr(context, 'strict', True)
return scanstring(string, end, encoding, strict)
pattern('"')(JSONString)
WHITESPACE = re.compile('[ \\t\\n\\r]*', FLAGS)
WHITESPACE_STR = ' \t\n\r'
def JSONObject(.0, context, _w = WHITESPACE.match, _ws = WHITESPACE_STR):
(s, end) = .0
pairs = { }
nextchar = s[end:end + 1]
if nextchar != '"':
if nextchar in _ws:
end = _w(s, end).end()
nextchar = s[end:end + 1]
if nextchar == '}':
return (pairs, end + 1)
elif nextchar != '"':
raise ValueError(errmsg('Expecting property name', s, end))
end += 1
encoding = getattr(context, 'encoding', None)
strict = getattr(context, 'strict', True)
scan_once = JSONScanner
while True:
(key, end) = scanstring(s, end, encoding, strict)
if s[end:end + 1] != ':':
end = _w(s, end).end()
if s[end:end + 1] != ':':
raise ValueError(errmsg('Expecting : delimiter', s, end))
end += 1
try:
if s[end] in _ws:
end += 1
if s[end] in _ws:
end = _w(s, end).end()
except IndexError:
pass
try:
(value, end) = scan_once(s, end, context)
except StopIteration:
raise ValueError(errmsg('Expecting object', s, end))
pairs[key] = value
nextchar = s[end:end + 1]
if nextchar in _ws:
end = _w(s, end).end()
nextchar = s[end:end + 1]
end += 1
if nextchar == '}':
break
elif nextchar != ',':
raise ValueError(errmsg('Expecting , delimiter', s, end - 1))
try:
if s[end] in _ws:
end += 1
if s[end] in _ws:
end = _w(s, end).end()
except IndexError:
pass
nextchar = s[end:end + 1]
end += 1
if nextchar != '"':
raise ValueError(errmsg('Expecting property name', s, end - 1))
continue
object_hook = getattr(context, 'object_hook', None)
if object_hook is not None:
pairs = object_hook(pairs)
return (pairs, end)
pattern('{')(JSONObject)
def JSONArray(.0, context, _w = WHITESPACE.match, _ws = WHITESPACE_STR):
(s, end) = .0
values = []
nextchar = s[end:end + 1]
if nextchar in _ws:
end = _w(s, end).end()
nextchar = s[end:end + 1]
if nextchar == ']':
return (values, end + 1)
scan_once = JSONScanner
while True:
try:
(value, end) = scan_once(s, end, context)
except StopIteration:
raise ValueError(errmsg('Expecting object', s, end))
values.append(value)
nextchar = s[end:end + 1]
if nextchar in _ws:
end = _w(s, end).end()
nextchar = s[end:end + 1]
end += 1
if nextchar == ']':
break
if nextchar != ',':
raise ValueError(errmsg('Expecting , delimiter', s, end))
try:
if s[end] in _ws:
end += 1
if s[end] in _ws:
end = _w(s, end).end()
continue
except IndexError:
continue
None<EXCEPTION MATCH>IndexError
return (values, end)
pattern('\\[')(JSONArray)
ANYTHING = [
JSONObject,
JSONArray,
JSONString,
JSONConstant,
JSONNumber]
JSONScanner = make_scanner(ANYTHING)
class JSONDecoder(object):
__all__ = [
'__init__',
'decode',
'raw_decode']
def __init__(self, encoding = None, object_hook = None, parse_float = None, parse_int = None, parse_constant = None, strict = True):
self.encoding = encoding
self.object_hook = object_hook
self.parse_float = parse_float
self.parse_int = parse_int
self.parse_constant = parse_constant
self.strict = strict
def decode(self, s, _w = WHITESPACE.match):
(obj, end) = self.raw_decode(s, idx = _w(s, 0).end())
end = _w(s, end).end()
if end != len(s):
raise ValueError(errmsg('Extra data', s, end, len(s)))
return obj
def raw_decode(self, s, **kw):
idx = kw.get('idx', 0)
context = kw.get('context', self)
try:
(obj, end) = JSONScanner(s, idx, context)
except StopIteration:
raise ValueError('No JSON object could be decoded')
return (obj, end)
__all__ = [
'JSONDecoder']